\chapter{结束语}
\label{cha:con}

\section{工作总结}
接口误用是导致软件错误、系统崩溃和漏洞的重要原因之一。
为提高接口误用检测能力以应对实际项目中检测精度与规模的矛盾关系，
本文以C程序作为载体，从接口使用约束描述、缺陷检测算法和实际项目应用三个角度展开系统性研究，
取得相应理论成果并实现相应的工具集合。本文的工作具体总结如下：
\begin{enumerate}
	\item 提出基于缺陷模式的接口使用约束领域特定语言IMSpec。
	为理解C程序接口误用缺陷特性，本文对六个不同领域被广泛使用的开源软件中830个接口误用缺陷修复报告进行研究，
	总结出三大类通用接口缺陷模式（参数、异常处理和函数调用关系）。
	基于缺陷模式特性，本文提出接口使用约束的领域特定描述语言IMSpec，
	并给出IMSpec语言的设计思路，定义语法结构与形式化语义。
	IMSpec能够有效地描述实际项目中接口误用实例的接口使用约束，为形式化定义接口使用约束条件与接口缺陷检测打下基础。
	
	\item 设计基于约束描述的规模化接口误用缺陷检测方法IMChecker。
	该方法通过对目标接口使用情况进行计算，构造分析上下文环境。
	通过多入口分析策略将大规模代码静态分析任务分解为独立的子任务。
	针对每一个子任务，即一个目标接口的某个特定调用上下文，
	通过提取和目标接口缺陷相关的程序语句，并利用抽象符号对路径的语义信息进行记录。
	最后基于目标接口的使用约束对抽象路径进行缺陷检测。
	对于多入口分析带来的精度损失，
	本文通过基于上下文的语义信息以及基于使用情况的统计信息两种策略对检测结果进行过滤与排序。
	本文在公开数据集Juliet Test Suite的13个接口缺陷相关的CWE分类上取得13.21\%的误报率和16.80\%的漏报率。
	该结果领先于主流的开源静态分析工具。
	
	\item 总结C程序接口误用缺陷数据集APIMU4C并开发基于图形化的C程序接口误用缺陷检测工具集Tsmart-IMChecker。
	基于接口误用缺陷实例以及公开测试集合，本文构造C程序接口误用缺陷数据集APIMU4C，
	以帮助研究人员和开发者更好地理解C程序接口缺陷、评估检测工具的能力以及展开新的研究工作。
	Tsmart-IMChecker工具集包含可视化规约撰写工具IMSpec-writer、缺陷分析引擎IMChecker-engine以及
	基于差异性对比的结果展示工具IMDisplayer。
	本文将Tsmart-IMChecker工具集应用于开源项目中，在最新的Linux内核、
	OpenSSL安全协议加密库以及Ubuntu操作系统应用软件中找到112个新的缺陷。
	至今，在提交的75个缺陷报告中，
	61个已经被开发者确认，32个被开发者修复。
	本文将实际项目应用中的结果和经验进行总结。
	
	
\end{enumerate}


\section{研究展望}
\label{sec:5.2}
在现有的研究基础上，为进一步保障C程序接口的正确使用，拟从如下3个方面开展进一步的研究：
\begin{enumerate}
	\item \textbf{IMSpec描述语言：}
	目前IMSpec规约描述语言由人工撰写。
	虽然IMSpec具有轻量级的语法形式、可视化撰写工具以及一次撰写多次使用的特点，
	人工撰写规约依旧在实际应用中面临挑战。
	特别是针对于没有文档的接口以及缺少领域经验的开发者，
	接口使用规约的正确性难以保证。
	自动规约挖掘技术能够从大量的代码库中学习接口使用规约。
	因此可以集成现有基于数据挖掘技术的规约推理工具，以利用自动化学习的结果。
	IMSpec能够有效地支持现有挖掘技术的规约模式。
	一个可能的工作流程可以是，首先利用自动挖掘技术对规约进行学习并生成规约列表，供用户选择和修改。
	针对缺失的规约，用户可以直接撰写相应的约束条件。
	此外，一个可靠的规约分享平台能够有效地在不同开发者间分享已有规约描述。
	同时，IMSpec目前针对调研结果中的接口使用约束设计，无法支持全部C语言语法结构和语义。
	未来可以逐渐扩展IMSpec的语法和语义，并提供语言的评估标准。
	
	\item \textbf{工具集合：}为支持大规模代码缺陷检测，本文采取基于多入口的分析策略。
	因此分析中由于上下文信息丢失，会带来精度损失。
	可能解决方案包括：
	（1）增加跨函数的摘要信息计算，以获得更加准确的上下文信息，提升过滤效果；
	（2）设计基于概率模型的排序算法，以优先展示具有高置信度、高影响域的缺陷检测结果；
	（3）优化路径提取策略，以针对性地获取更加丰富的语义信息。
	为能够帮助开发者撰写IMSpec约束和对结果进行审查，
	本文开发可视化工具集合Tsmart-IMChecker。
	目前，可视化客户端并没有进行测试，包括：用户友好性、稳定性等等。
	因此，未来可以邀请实际开发者对客户端试用以及测试，提高工具集的实际效果。
	
	
	\item \textbf{自动修复：}研究自动化接口缺陷修复技术，以辅助开发者修复缺陷。
	本文在对接口缺陷检测的过程中，记录正确的使用路径以帮助开发者理解缺陷原因、提供缺陷修改意见。
	后续，可以结合代码综合技术，自动化生成修复补丁，降低开发者的维护成本。
	另一方面，针对修复后的代码，可以采用回归分析的策略，降低代码分析成本。
	特别地，对已经检测过的目标接口，如果对应上下文相关代码没有被修改，则不必进行缺陷检测。
\end{enumerate}
%(18P161)
